with Ada.Text_Io, Generateur_De_Nombres_Aleatoires;

package body Gestion_De_Couleurs is
   use Ada.Text_Io;

   package Couleur_Io is new Enumeration_Io (Couleur);

   procedure Put (Item     : in Couleur;
         Format   : in Natural := 0;
         Position : in Place   := Gauche) is
      Item_String : constant String := Couleur'Image (Item);

   begin
      if (Format = 0) or else (Item_String'Length >= Format) then
         Put (Item_String);
      else
         case Position is
            when Gauche =>
               Put (Item_String & (Item_String'Length + 1 .. Format => ' '));
            when Milieu =>
               Put ((1 .. (Format - Item_String'Length) / 2 => ' ') & Item_String &
                  ((Format - Item_String'Length) / 2 + Item_String'Length .. Format => ' '));
            when Droite =>
               Put ((1 .. Format - Item_String'Length => ' ') & Item_String);
         end case;
      end if;
   end Put;

   procedure Get (Item : out Couleur) is
      Erreur : Boolean := False;
   begin
      loop
         begin
            Couleur_Io.Get (Item);
            exit;
         exception
            when others =>
               Put_Line ("Erreur de saisie");
               if Erreur then
                  Put_Line ("Voici les couleurs disponibles: ");
                  for C in Couleur loop
                     Put (C);
                     Put ("  ");
                  end loop;
                  New_Line;
               end if;
               Skip_Line;
               Put_Line (" Redonner la valeur de couleur a saisir");
               Erreur := True;
         end;
      end loop;
   end Get;

   function Une_Couleur_Aleatoire return Couleur is
      use Generateur_De_Nombres_Aleatoires;
   begin
      return Couleur'Val (Entier_Aleatoire (Nombre_De_Couleurs - 1));
   end Une_Couleur_Aleatoire;

end Gestion_De_Couleurs;

